﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using mvLibrary.Helpers.Utils;

namespace mvLibrary.Helpers.Builders
{
    public class PickReportFormatterBuilder
    {
        private string report;
        private const string LETRA_C = "C";
        private const string ESPACIO = " ";
        private const string ESPACIO_DOBLE = "  ";
        private const string MENOS_UNO = "-1";
        private const string MENOS_CERO = "-0";
        private const string POTENCIA_TRES = "³";

        public PickReportFormatterBuilder(string report)
        {
            this.report = report;
        }

        /* 
         * Muchos reportes salen impresos con una letra 'C' erronea,
         * este codigo elimina solo esa primera 'C'
         */
        public void RemoveInitialCLetterError()
        {
            var regex = new Regex(Regex.Escape(LETRA_C));
            this.report = regex.Replace(report, ESPACIO, 1);
        }

        /*
         * La palabra Señores no aparece bien escrita, por la ñ       
         */
        public void FixSenioresWordProblem()
        {
            Regex rgxSenior = new Regex("Se[^a-zA-Z0-9]or");
            this.report = rgxSenior.Replace(report, "Señor");
        }
        /*
         * 
         * Elimino las "E W"  y las "F W"
         */
        public void RemoveEWAndFWError()
        {
            Regex rgxEW = new Regex("E[^a-zA-Z0-9 -]W");
            Regex rgxFW = new Regex("F[^a-zA-Z0-9 -]W");

            report = rgxEW.Replace(report, "");
            report = rgxFW.Replace(report, "");
        }

        /*
         * Se eliminan todos los numeros 3 que aparecen como potencia.
         */
        public void RemovePotencialThreeError()
        {
            report = report.Replace(POTENCIA_TRES, "");
        }

        /*
         * Por temas de Unicode no se ven las flechas hacia la izquierda,
         * pero se Elimina los caracteres "<-E" y "<-F" 
         */

        public void RemovieArrowEAndArrowF()
        {
            report = report.Replace("E", "");
            report = report.Replace("F", "");
        }

        /*
         * Elimino los -1 y los -0 que aparecen de mas.
         */
        public void RemoveMinusOneMinusZero()
        {

            Regex rgxMenosUno = new Regex("[^a-zA-Z0-9]" + MENOS_UNO);
            Regex rgxMenosCero = new Regex("[^a-zA-Z0-9]" + MENOS_CERO);

            report = rgxMenosUno.Replace(report, "");
            report = rgxMenosCero.Replace(report, "");
        }

        /*
         * Reduzco el tamaño del reporto para que se vea mas compacto.
         */
        public void ReduceTwoEspacesToOne()
        {
            this.report = report.Replace(ESPACIO_DOBLE, ESPACIO);
        }

        /*
         * Elimina todas las lineas anteriores al texto encontrado que se pase por parametro.
         */
        public void RemoveLinesBeforeString(string ocurrencia)
        {
            this.report = this.report.Substring(report.IndexOf(ocurrencia));
        }

        public string Build()
        {
            return this.report;
        }
    }
}
